#pragma once

#include <memory>
#include <vector>

#include "Types.h"
#include <boost/smart_ptr/shared_ptr.hpp>

namespace TrueText {

class Face;
class FontEffectOutline;
class FontEffectShadow;
class FontImpl;

class Font 
{
public:
	static const float DEFAULT_HEIGHT;
public:
    // TrueText objects reference each other via shared representations. All lifetime dependencies are handled automatically,
    // so feel free to delete face object when no longer needed even if it is referenced by font.

	// Face object gets copied, so any changes to the original Face object aren't propagated to font.
	Font(const Face& face);

    Font(const Font& rhs);
    const Font& operator=(const Font& rhs);

	float GetHeight() const;
	void SetHeight(float value);

	const Color& GetColor() const;
	void SetColor(const Color& value);

	FontEffectOutline& Outline();
	FontEffectShadow& Shadow();

    boost::shared_ptr<FontImpl> getImpl() const;
private:
    boost::shared_ptr<FontImpl> impl;
};

}